2dspere index in {mongodb}
- aliases
- No value
- tags
- mongodb/index
- description
- No value
- links
- 0200 mongodb ๐ฅฌ https://www.mongodb.com/docs/manual/geospatial-queries/#geospatial-indexes
- status
- ai response
- project
- false
- area
- false
- resource
- false
- title
- 2dspere index in {mongodb}
- created
- 2025-03-04T15:55:32
- updated
- 2025-03-06T13:11:31
mongodb์์ $geoNear๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒ์์ ํ๊ธฐ ์ํด์ ๋ฐ๋์ 2d ํน์ 2dsphere ์ธ๋ฑ์ค๊ฐ ์ ํด์ง ์ปฌ๋ผ์ ํฌํจ๋์ด์ผ ํฉ๋๋ค.
์๋ ๋ฌธ์๋ MongoDB์์ ์ ๊ณตํ๋ 2dsphere ์ธ๋ฑ์ค(์ง๊ตฌ ํ๋ฉด์ ๊ทผ์ฌํ์ฌ ๊ตฌ๋ฉด ์์ ์์น ์ ๋ณด๋ฅผ ์ง์ํ๊ธฐ ์ํ ์ธ๋ฑ์ค)์ ๋ํด, ์ง๋ฆฌ์ ์ฟผ๋ฆฌ์ ์ฌ์ฉ๋๋ $geoNear ๋ช
๋ น(Aggregation Pipeline ๋จ๊ณ)๊น์ง ํฌํจํด ํ๊ตญ์ด๋ก ์ ๋ฆฌํ ๋ฌธ์์
๋๋ค. ๊ณต์ ๋ฌธ์( MongoDB ๊ณต์ Geospatial Queries )๋ฅผ ๋ฐํ์ผ๋ก ์ดํดํ๊ธฐ ์ฝ๊ฒ ์ฌ๊ตฌ์ฑํ์ต๋๋ค.
MongoDB 2dsphere ์ธ๋ฑ์ค ๊ฐ์
MongoDB๋ ์ง๋ฆฌ ๊ณต๊ฐ ์ฟผ๋ฆฌ(Geospatial Query)๋ฅผ ์ง์ํ๊ธฐ ์ํด ๋ ๊ฐ์ง ์ข ๋ฅ์ ์ง๋ฆฌ ๊ณต๊ฐ ์ธ๋ฑ์ค๋ฅผ ์ ๊ณตํ๋ฉฐ, ๊ทธ ์ค ํ๋๊ฐ 2dsphere ์ธ๋ฑ์ค์ ๋๋ค. 2dsphere ์ธ๋ฑ์ค๋ ์ง๊ตฌ ํ๋ฉด(๊ตฌ ํํ)์ ๋ชจํํํ์ฌ, GeoJSON ๊ฐ์ฒด ๋๋ ์ขํ ์์ผ๋ก ์ง์ ๋ ๋ํ(์ , ์ , ๋ค๊ฐํ ๋ฑ)์ ๋ํ ๊ณต๊ฐ ์ฐ์ฐ์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋๋ก ์ง์ํฉ๋๋ค.
์ฃผ์ ํน์ฑ์ ์๋์ ๊ฐ์ต๋๋ค:
-
๊ตฌ(็) ํํ์ ์ขํ ๊ณ์ฐ
- 2dsphere ์ธ๋ฑ์ค๋ โ๊ฒฝ๋(Longitude), ์๋(Latitude)โ๋ก ํํ๋๋ WGS84(World Geodetic System 1984) ์ขํ๊ณ๋ GeoJSON ์ขํ๊ณ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ๊ฑฐ๋ฆฌ ๊ณ์ฐ ๋ฑ์ ์ค์ ์ง๊ตฌ ๊ตฌ๋ฉด์ ๊ธฐ๋ฐ์ผ๋ก ํ ๊ทผ์ฌ๊ฐ์ ํ์ฉํฉ๋๋ค.
-
๋ค์ํ GeoJSON ํํ ์ง์
Point(์ )LineString(์ )Polygon(๋ค๊ฐํ)MultiPoint,MultiLineString,MultiPolygonGeometryCollection- ์ด๋ฌํ ๋ํ๋ค ๊ฐ์ ๊ด๊ณ(ํฌํจ ์ฌ๋ถ, ๊ต์ฐจ ์ฌ๋ถ, ๊ทผ์ ๋ ๋ฑ)๋ฅผ ๋งค์ฐ ๋น ๋ฅด๊ฒ ๊ณ์ฐํ ์ ์์ต๋๋ค.
-
์ง๋ฆฌ์ ์ฐ์ฐ์ ์ํ ์ ์ฉ ์ฟผ๋ฆฌ ์ฐ์ฐ์ ์ ๊ณต
$near,$geoWithin,$geoIntersects,$geoNear(์ง๊ณ ํ์ดํ๋ผ์ธ)๋ฑ์ ํตํด, ๋ฐ๊ฒฝ ๋ด ์์น ๊ฒ์, ํน์ ์์ญ(ํด๋ฆฌ๊ณค ๋ฑ)์ ํฌํจ๋ ๋ฌธ์ ๊ฒ์, ๋ํ ๊ฐ ๊ต์ฐจ ์ฌ๋ถ ๋ฑ์ ๋น ๋ฅด๊ฒ ๊ฒ์ํ๊ณ ๊ณ์ฐํ ์ ์์ต๋๋ค.
2dsphere ์ธ๋ฑ์ค ์์ฑ ๋ฐฉ๋ฒ
์ธ๋ฑ์ค๋ฅผ ์์ฑํ ํ๋ ๊ตฌ์กฐ
์ผ๋ฐ์ ์ผ๋ก 2dsphere ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋ ค๋ฉด, ํด๋น ํ๋์๋ GeoJSON ํํ ๋๋ [๊ฒฝ๋, ์๋] ๋ฐฐ์ด ํ์์ด ์ ์ฅ๋์ด ์์ด์ผ ํฉ๋๋ค. ์์๋ก location ํ๋์ Point ํ์
์ GeoJSON์ ์ ์ฅํ๋ค๊ณ ํ๋ฉด ์๋์ ๊ฐ์ ํํ๊ฐ ์ผ๋ฐ์ ์
๋๋ค:
{
"_id": 1,
"name": "Seoul City Hall",
"location": {
"type": "Point",
"coordinates": [126.9779692, 37.566535]
}
}
MongoDB์์ ์ขํ๋ [๊ฒฝ๋, ์๋] ์์์ฌ์ผ ํฉ๋๋ค.
2dsphere ์ธ๋ฑ์ค ์์ฑ ์์
location ํ๋๋ฅผ 2dsphere ์ธ๋ฑ์ค๋ก ์์ฑํ๋ ค๋ฉด ์๋ ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค:
db.collection.createIndex(
{ location: "2dsphere" }
);
createIndex๋ฉ์๋๋ ํด๋น ์ปฌ๋ ์ ์ ์ง์ ๋ ํ๋(์ฌ๊ธฐ์๋location)์ 2dsphere ์ธ๋ฑ์ค๋ฅผ ์์ฑํฉ๋๋ค.- 2dsphere ์ธ๋ฑ์ค๋ MongoDB ๋ฒ์ 2.4 ์ด์์์ ์ง์๋ฉ๋๋ค.
๋ํ ๋ค๋ฅธ ํ๋์ ๊ฒฐํฉํ์ฌ ๋ณตํฉ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ ์๋ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, category ํ๋์ ํจ๊ป ๋ง๋ค ์ ์์ต๋๋ค:
db.collection.createIndex(
{ category: 1, location: "2dsphere" }
);
์ด๋ ๊ฒ ํ๋ฉด MongoDB๊ฐ category๋ก ๋จผ์ ์ ๋ ฌํ ๋ค, ๋์ผํ ๋ฒ์ฃผ ๋ด์์ location ์ง๋ฆฌ ์ฟผ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ์ํํ ์ ์์ต๋๋ค.
2dsphere ์ธ๋ฑ์ค๋ฅผ ํ์ฉํ ์ฟผ๋ฆฌ
2dsphere ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ฉด, MongoDB์์ ์ ๊ณตํ๋ ์ง๋ฆฌ ๊ณต๊ฐ ์ ์ฉ ์ฐ์ฐ์๋ฅผ ํตํด ์ง๋ฆฌ์ ์ฐ์ฐ์ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
1. $near
- ๊ธฐ๋ฅ: ํน์ ์ (์ขํ)์์ ๊ฐ๊น์ด ์์๋๋ก ๋ฌธ์๋ฅผ ์ ๋ ฌํ์ฌ ๊ฐ์ ธ์ต๋๋ค.
- ์ฌ์ฉ ์ํฉ: ๋ฐ๊ฒฝ ๋ด ๊ฒ์(์ํ ๋ฒ์)์ด๋ ๊ฐ์ฅ ๊ฐ๊น์ด ์์ ์ ๋ ฌ์ด ํ์ํ ๊ฒฝ์ฐ.
์์) ์์ธ์์ฒญ(coordinates: [126.9779692, 37.566535])์ ๊ธฐ์ค์ผ๋ก 2km ์ด๋ด์ ์๋ ๋ฌธ์๋ฅผ ๊ฒ์ํ๊ณ , ๊ฐ๊น์ด ์์ผ๋ก ์ ๋ ฌํ๋ ์ฟผ๋ฆฌ:
db.collection.find({
location: {
$near: {
$geometry: {
type: "Point",
coordinates: [126.9779692, 37.566535]
},
$maxDistance: 2000 // ๋จ์: ๋ฏธํฐ
}
}
});
$geometry: ๊ฒ์ ๊ธฐ์ค์ (GeoJSON ํํ)$maxDistance: ์ต๋ ๊ฒ์ ๊ฑฐ๋ฆฌ(๋ฏธํฐ ๊ธฐ์ค)$nearSphere๋ผ๋ ์ฐ์ฐ์๋ ์กด์ฌํ์ง๋ง, 2dsphere ์ธ๋ฑ์ค์์๋$near๊ฐ ์ด๋ฏธ ๊ตฌ๋ฉด ๊ณ์ฐ์ ์ง์ํฉ๋๋ค.
2. $geoWithin
- ๊ธฐ๋ฅ: ์ง์ ํ ๋ค๊ฐํ(Polygon), ๋ฉํฐํด๋ฆฌ๊ณค(MultiPolygon), ์(Circle), ๊ฒฝ๊ณ ์์(Box) ๋ฑ์ ๋ํ ๋ด์ ํฌํจ๋ ๋ฌธ์๋ฅผ ์ฐพ์ต๋๋ค.
- ์ฌ์ฉ ์ํฉ: ํน์ ๊ตฌ์ญ์ด๋ ํ์ ๊ตฌ์ญ ๋ด๋ถ์ ํด๋นํ๋ ๋ฌธ์๋ฅผ ๊ฒ์ํ ๋.
์์) ์๋๋ [126.90, 37.55] ~ [127.10, 37.70] ๋ฒ์์ ์ฌ๊ฐํ ๋ด๋ถ์ ์์นํ ๋ฌธ์๋ฅผ ๊ฒ์ํ๋ ์ฟผ๋ฆฌ์
๋๋ค:
db.collection.find({
location: {
$geoWithin: {
$geometry: {
type: "Polygon",
coordinates: [
[
[126.90, 37.55],
[127.10, 37.55],
[127.10, 37.70],
[126.90, 37.70],
[126.90, 37.55]
]
]
}
}
}
});
- ๋ํ(Polygon)์์๋ ๋ฐ๋์ ํ๊ณก์ (์์์ ๊ณผ ๋์ ์ด ๋์ผ)์ผ๋ก ์ ์ํด์ผ ํฉ๋๋ค.
3. $geoIntersects
- ๊ธฐ๋ฅ: ํน์ ๋ํ์ด ๋ค๋ฅธ ๋ํ๊ณผ ๊ต์ฐจ(Intersects) ํ๋ ๋ฌธ์๋ฅผ ์ฐพ์ต๋๋ค.
- ์ฌ์ฉ ์ํฉ: ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์ ์ ์ ๋ค๊ฐํ์ด ์ปฌ๋ ์ ์ ์๋ ํด๋ฆฌ๊ณค(์: ์ง์ญ ๊ฒฝ๊ณ)๋ค๊ณผ ์ค์ฒฉ๋๋์ง ํ์ธํ ๋.
์์) region ํ๋์ ์ ์ฅ๋ ํด๋ฆฌ๊ณค์ด, ์๋ ์ ์๋ ํด๋ฆฌ๊ณค๊ณผ ๊ต์ฐจํ๋์ง ์ฌ๋ถ๋ฅผ ํ๋ณํ๋ ์ฟผ๋ฆฌ:
db.collection.find({
region: {
$geoIntersects: {
$geometry: {
type: "Polygon",
coordinates: [
[
[126.90, 37.55],
[127.00, 37.55],
[127.00, 37.65],
[126.90, 37.65],
[126.90, 37.55]
]
]
}
}
}
});
$geoNear (Aggregation Pipeline)
$geoNear๋ ์ง๊ณ(Aggregation) ํ์ดํ๋ผ์ธ์์ ์ฌ์ฉ๋๋ ์ง๋ฆฌ ๊ณต๊ฐ ์ฐ์ฐ ๋จ๊ณ์
๋๋ค. $near ์ฟผ๋ฆฌ์ ์ ์ฌํ๊ฒ ๊ฑฐ๋ฆฌ์ ๋ํ ๊ณ์ฐ ๋ฐ ์ ๋ ฌ์ ์ํํ์ง๋ง, ์ง๊ณ ํ์ดํ๋ผ์ธ๊ณผ ๊ฒฐํฉํด ๋ณด๋ค ๋ณต์กํ ๋ถ์์ด๋ ํ์ ์ฒ๋ฆฌ๋ฅผ ์ฝ๊ฒ ๊ตฌํํ ์ ์์ต๋๋ค.
์ฌ์ฉ ๋ฐฉ๋ฒ
db.collection.aggregate([
{
$geoNear: {
near: {
type: "Point",
coordinates: [126.9779692, 37.566535]
},
distanceField: "dist.calculated",
maxDistance: 2000, // ์ ํ ์ฌํญ (๋ฏธํฐ ๋จ์)
query: { category: "cafe" }, // ๋ค๋ฅธ ํ๋์ ๋ํ ํํฐ ์กฐ๊ฑด ๊ฐ๋ฅ
spherical: true // ๊ตฌ๋ฉด(์ง๊ตฌ) ๊ณ์ฐ ์ฌ์ฉ ์ฌ๋ถ
}
},
{
$project: {
name: 1,
"dist.calculated": 1
}
}
]);
$geoNear๋จ๊ณ๋ ํ์ดํ๋ผ์ธ ์ฒซ ๋จ๊ณ(๋๋$match๊ฐ ์๋ ์ฒซ ๋ฒ์งธ ๋จ๊ณ)์์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค.- ์ฃผ์ ์ต์
:
near: ๊ธฐ์ค์ (GeoJSON ๋๋[๊ฒฝ๋, ์๋]๋ฐฐ์ด)distanceField: ๊ฑฐ๋ฆฌ ๊ฐ์ ์ ์ฅํ ํ๋ ์ด๋ฆ ์ง์ maxDistance: ์ต๋ ๊ฒ์ ๊ฑฐ๋ฆฌ(๋จ์: ๋ฏธํฐ)query: ๋ค๋ฅธ ์กฐ๊ฑด๊ณผ ๊ฒฐํฉ ๊ฐ๋ฅ (์:category: "cafe")spherical:true๋ก ์ค์ ์ ์ง๊ตฌ ๊ตฌ๋ฉด์ ๊ทผ์ฌํ์ฌ ๊ฑฐ๋ฆฌ ๊ณ์ฐ
์ด๋ ๊ฒ $geoNear๋ฅผ ํ์ฉํ๋ฉด, ๊ฑฐ๋ฆฌ ์ ๋ณด๋ฅผ ๊ณ์ฐํด ๋ฌธ์์ ์ถ๊ฐํ ๋ค, ํ์ $match, $group, $project ๋ฑ์ ํ์ดํ๋ผ์ธ ์คํ
์ด์ง๋ก ๋ค์ํ ๋ถ์์ ์ํํ ์ ์์ต๋๋ค.
์ฃผ์์ฌํญ ๋ฐ ๋ฒ ์คํธ ํ๋ํฐ์ค
- ์ธ๋ฑ์ค ์์ฑ ์ ์ขํ ์์ ์ค์
[๊ฒฝ๋, ์๋]์์๋ฅผ ์๋ชป ์ง์ ํ๋ฉด ์๋์ ๋ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ ๋์ฌ ์ ์์ต๋๋ค.
- ํ๋ ๋ฐ์ดํฐ ํ์
location.type์ดPoint,Polygon๋ฑ ์ ํจํ GeoJSON ํ์ ์ธ์ง ํ์ธํฉ๋๋ค.coordinates๋ฐฐ์ด๋ ์ฌ๋ฐ๋ฅธ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ถฐ์ผ ํฉ๋๋ค. (ํนํ Polygon์ ๊ฒฝ์ฐ ํ๊ณก์ ์ผ๋ก ์ ์)
- ๋ณตํฉ ์ธ๋ฑ์ค ์ฌ์ฉ ์ ๊ณ ๋ ค ์ฌํญ
- ์ง๋ฆฌ ๊ณต๊ฐ ์ธ๋ฑ์ค์ ์ผ๋ฐ(1, -1) ์ธ๋ฑ์ค๋ฅผ ํจ๊ป ์ธ ๋๋ ์ฟผ๋ฆฌ ํจํด์ ์ฃผ์ ๊น๊ฒ ์ดํด๋ด์ผ ํฉ๋๋ค.
- ์๋ฅผ ๋ค์ด
{ category: 1, location: "2dsphere" }๋ฅผ ๋ง๋ค๋ฉด, ์ฟผ๋ฆฌ ์category๋ฅผ ๋จผ์ ์ ๋ณํ ๋คlocation์ง๋ฆฌ ์ฟผ๋ฆฌ๋ฅผ ์ํํฉ๋๋ค. - ์ง๋ฆฌ ์ฐ์ฐ๊ณผ ๋ฒ์ ์ฟผ๋ฆฌ๊ฐ ํจ๊ป ์์ ๋๋ ์ฟผ๋ฆฌ ๊ณํ(Explain)์ ํตํด ์ฑ๋ฅ์ ์ ๊ฒํด์ผ ํฉ๋๋ค.
- ์ง๋ฆฌ์ ๋ฒ์ ์ ํ(์ฟผ๋ฆฌ ์ค์บ ์ต์ํ)
$nearํน์$geoNear์ฌ์ฉ ์,$maxDistanceํน์maxDistance๋ฅผ ์ค์ ํ์ง ์์ผ๋ฉด ์ค์บ ๋ฒ์๊ฐ ์ปค์ ธ ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.- ๊ฐ๋ฅํ ๊ตฌ์ฒด์ ์ธ ๋ฐ๊ฒฝ ๋๋ ์ฟผ๋ฆฌ ์กฐ๊ฑด์ ์ค์ ํ์ฌ ํจ์จ์ ๋์ด๋ ๊ฒ์ด ์ข์ต๋๋ค.
- ์ ํ๋ vs ์ฑ๋ฅ
- 2dsphere ์ธ๋ฑ์ค๋ ์ค์ GIS(์ง๋ฆฌ ์ ๋ณด ์์คํ )์ ๋นํด ์ค์ฐจ ๋ฒ์๊ฐ ์๋ ๊ทผ์ฌ ๊ณ์ฐ์ ํฉ๋๋ค.
- ๊ทธ๋ฌ๋ ๋๋ถ๋ถ์ ์์น ๊ธฐ๋ฐ ์๋น์ค(O2O, ์ง๋, ๋งค์ฅ ์ฐพ๊ธฐ ๋ฑ)์๋ ์ถฉ๋ถํ ์ ํ๋๋ฅผ ์ ๊ณตํ๋ฏ๋ก, ์๊ตฌ์ฌํญ์ ๋ง์ถ์ด ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.
์์ ์๋๋ฆฌ์ค
-
๋งค์ฅ ์์น ๊ฒ์
- ์ฌ์ฉ์ ํ์ฌ ์์น์์ ๊ฐ์ฅ ๊ฐ๊น์ด ๋งค์ฅ 10๊ณณ ์ฐพ๊ธฐ
$near๋๋$geoNear์ฌ์ฉ +$limit์ค์
-
ํ์/๋ฐฐ๋ฌ ์๋น์ค
- ๋๋ผ์ด๋ฒ(๋๋ ๋ผ์ด๋)์ ์์น๋ฅผ ์ค์๊ฐ์ผ๋ก ์ ์ฅํ๊ณ , ์ฌ์ฉ์ ์ฃผ๋ณ ๋๋ผ์ด๋ฒ๋ฅผ ๊ฒ์
$geoWithin์ผ๋ก ๊ตฌ์ญ ๊ธฐ๋ฐ ํํฐ,$near๋๋$geoNear๋ก ๊ฑฐ๋ฆฌ ๊ธฐ๋ฐ ์ ๋ ฌ
-
์ง์ญ ๊ฒฝ๊ณ ๊ธฐ๋ฐ ํต๊ณ
- Polygon์ผ๋ก ํ์ ๊ตฌ์ญ์ ์ ์ฅํ๊ณ ,
$geoWithin์ ํตํด ์ฌ์ฉ์๊ฐ ์ํ ํ์ ๊ตฌ์ญ์ ํ๋ณ $geoIntersects๋ก ๊ต์ฐจ ์ฌ๋ถ ๋ถ์(์: ์ด๋ฒคํธ ๋ฐ๊ฒฝ๊ณผ ํ์ ๊ตฌ์ญ์ด ์ผ๋ง๋ ๊ฒน์น๋์ง)
- Polygon์ผ๋ก ํ์ ๊ตฌ์ญ์ ์ ์ฅํ๊ณ ,
-
๋ฐ์ดํฐ ํ์ฒ๋ฆฌ/๋ถ์
$geoNear๋ฅผ Aggregation Pipeline์ ๊ฒฐํฉํ์ฌ, ๊ฒ์๋ ๋ฐ์ดํฐ์ ๋ํ ์ถ๊ฐ ํต๊ณ๋ ๊ทธ๋ฃน ์ฐ์ฐ์ ์ํ
๊ฒฐ๋ก
MongoDB์ 2dsphere ์ธ๋ฑ์ค๋ ์ง๊ตฌ ํ๋ฉด์ ๋ค๋ฃจ๋ ๋ค์ํ ์์น ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์์ ํต์ฌ์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
- ํต์ฌ ์์ฝ:
locationํ๋๋ฅผ GeoJSON ํํ(ํน์ ๊ฒฝ๋/์๋ ๋ฐฐ์ด)๋ก ์ค์ db.collection.createIndex({ location: "2dsphere" })๋ก ์ธ๋ฑ์ค ์์ฑ$near,$geoWithin,$geoIntersects,$geoNear๋ฑ์ ํ์ฉํ์ฌ ์ง๋ฆฌ ์ฟผ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ์ํ
๋ณต์กํ ๋ถ์์ด ํ์ํ ๊ฒฝ์ฐ $geoNear ๋จ๊ณ์ Aggregation Pipeline์ ๊ฒฐํฉํด ๋ค์ํ๊ฒ ํ์ฅํ ์ ์์ต๋๋ค. ์ค๋ฌด์์๋ ๋ฐ์ดํฐ ๋ถํฌ์ ์ค์ ์ฟผ๋ฆฌ ํจํด์ ๋ฐ๋ผ ์ง๋ฆฌ ์ธ๋ฑ์ค๋ฅผ ์ด๋ป๊ฒ ์ค๊ณํ ์ง, ์ฟผ๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ์ต์ ํํ ์ง๋ฅผ ๊ณ ๋ คํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
์ฐธ๊ณ ์๋ฃ
- MongoDB ๊ณต์ ๋ฌธ์: Geospatial Queries
์ ๋ฌธ์๋ MongoDB 2dsphere ์ธ๋ฑ์ค ๋ฐ $geoNear๋ฅผ ํฌํจํ ์ง๋ฆฌ ๊ณต๊ฐ ์ฟผ๋ฆฌ์ ๋ํ ํต์ฌ ๊ฐ๋
๊ณผ ์ฌ์ฉ๋ฒ์ ์ ๋ฆฌํ ๊ฒ์ผ๋ก, ์ค์ ํ๋ก์ ํธ ์ ์ฉ ์์๋ ๋ ์์ธํ ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง, ์ค๋ฉ, ์ฑ๋ฅ ํ๋ ์ ๋ต ๋ฑ์ ํจ๊ป ๊ณ ๋ คํ์๊ธฐ ๋ฐ๋๋๋ค.